/* 封装 axios ⽤于发送请求 */
// 导⼊ axios
import axios from 'axios'
import { useUserStore } from '@/stores/user'
import { ElMessage } from 'element-plus'
import router from '@/router/index.js'

const RESPONE_CODE = {
    SUCCESS: 10000,
    ERROR: 500,
    UNAUTHORIZED: 401
}


// 创建⼀个新的axios实例
const instance = axios.create({
    // 请求基础地址, 这里根据实际情况配置
    baseURL: 'http://localhost:4000/api',
    // 请求超时时间
    timeout: 5000
})

// 请求拦截器
instance.interceptors.request.use((config) => {
    // 在发送请求之前做些什么

    // config: 包含了所有请求信息的对象，⽐如：method/url/headers...
    const userStore = useUserStore()

    // 判断是否有token，如果有的话，请求头中加上token
    if (userStore.token) {
        config.headers.Authorization = `Bearer ${userStore.token}`
    }
    return config
}, (error) => {
    // 对请求错误做些什么
    return Promise.reject(error)
})

// 响应拦截器
instance.interceptors.response.use((response) => {
    // 对响应数据做点什么
    const { data: resp } = response

    const { code, message, data } = resp
    if (code === RESPONE_CODE.SUCCESS) {
        return data
    } else {
        return Promise.reject(new Error(message))
    }
}, (error) => {
    // 对响应错误做点什么
    const { status, data: { message } } = error.response

    if (status === RESPONE_CODE.UNAUTHORIZED) {
        ElMessage.error(message)
        // 清除token
        const userStore = useUserStore()
        userStore.logout()

        // 跳转到登录⻚⾯
        router.push(`/login?redirectUrl=${router.currentRoute.value.path}`)
    } 


    return Promise.reject(error)
})
// 默认导出请求实例
export default instance
